' iBAddress2.ibas
{SECUREFILES OFF}

_R1Record:
   OPEN "iBAddrDB" FOR RANDOM AS #1
   J=I-1*7+1
   SEEK #1,J
   INPUT #1,N
   INPUT #1,A$ : INPUT #1,B$
   INPUT #1,C$ : INPUT #1,D$
   INPUT #1,E$ : INPUT #1,F$
   CLOSE #1
   R=2
RETURN

_W1Now:
   OPEN "iBAddrDB" FOR RANDOM AS #1
   J=I-1*7+1
   SEEK #1,J
   PRINT #1,N
   PRINT #1,A$ : PRINT #1,B$
   PRINT #1,C$ : PRINT #1,D$
   PRINT #1,E$ : PRINT #1,F$
   CLOSE #1
RETURN

_W1Record:
   A$=FIELD$(#2) : B$=FIELD$(#4)
   C$=FIELD$(#6) : D$=FIELD$(#8)
   F$=FIELD$(#13)
   GOSUB _W1Now
RETURN

_D1Record:
   OPEN "iBAddrDB" FOR INPUT AS #1
   OPEN "iBAddrDBt" FOR OUTPUT AS #2
   J=I-1*7
   FOR M=1 TO J
      INPUT #1,J$ : PRINT #2,J$
   NEXT
   FOR M=1 TO 7 : INPUT #1,J$ : NEXT
   J=J+8 : P=K*7
   FOR M=J TO P
      INPUT #1,J$ : PRINT #2,J$
   NEXT
   CLOSE #2
   CLOSE #1
   KILL "iBAddrDB"
   RENAME "iBAddrDBt","iBAddrDB"
   IF I=K LET I=I-1
   K=K-1
RETURN

_RFirst:
   GOSUB _W1Record
   I=1
   GOSUB _R1Record 
RETURN

_RPrevious:
   GOSUB _W1Record
   I=I-1 : I=MAX(I,1)
   GOSUB _R1Record 
RETURN

_RNext:
   GOSUB _W1Record
   I=I+1 : I=MIN(I,K)
   GOSUB _R1Record 
RETURN

_RLast:
   GOSUB _W1Record
   I=K
   GOSUB _R1Record 
RETURN

_RNew:
   IF K>0 GOSUB _W1Record
   L=L+1 : N=L
   K=K+1 : I=K
   A$="" : B$="" : C$=""
   D$="" : E$="00/00/0000" : F$=""
   GOSUB _W1Now : GOSUB _R1Record
RETURN

_RDelete:
  J=MESSAGEBOX("Really delete this record ?",3)
   IF J=1 THEN
      GOSUB _D1Record
      IF K=0 THEN GOSUB _RNew
      ELSE GOSUB _R1Record
      ENDIF
   ENDIF
RETURN

_W1Swap:
   V=X-J+1
   W=Y-J+1
   SEEK #1,V
   INPUT #1,M
   INPUT #1,A$ : INPUT #1,B$
   INPUT #1,C$ : INPUT #1,D$
   INPUT #1,E$ : INPUT #1,F$
   SEEK #1,W
   INPUT #1,O
   INPUT #1,G$ : INPUT #1,H$
   INPUT #1,I$ : INPUT #1,J$
   INPUT #1,K$ : INPUT #1,L$
   SEEK #1,V
   PRINT #1,O
   PRINT #1,G$ : PRINT #1,H$
   PRINT #1,I$ : PRINT #1,J$
   PRINT #1,K$ : PRINT #1,L$
   SEEK #1,W
   PRINT #1,M
   PRINT #1,A$ : PRINT #1,B$
   PRINT #1,C$ : PRINT #1,D$
   PRINT #1,E$ : PRINT #1,F$
   IF N=M LET I=W-1\7+1
   IF N=O LET I=V-1\7+1
   P$=Q$
RETURN

_RSort:
   GOSUB _W1Record
   J=S+1 : IF S=3 LET J=J+2
   OPEN "iBAddrDB" FOR RANDOM AS #1
   P=K*7
   FOR X=J TO P STEP 7
      SEEK #1,X
      INPUT #1,P$
      IF S=3 LET P$=RIGHT$(P$,4)+MID$(P$,4,2)+LEFT$(P$,2)
      Z=X+7
      FOR Y=Z TO P STEP 7
         SEEK #1,Y
         INPUT #1,Q$
         IF S=3 LET Q$=RIGHT$(Q$,4)+MID$(Q$,4,2)+LEFT$(Q$,2)
         IF T=0 THEN
            IF P$>Q$ GOSUB _W1Swap
         ELSE
            IF P$<Q$ GOSUB _W1Swap
         ENDIF
      NEXT
   NEXT
   CLOSE #1
   GOSUB _R1Record
RETURN

_InitPgm:
   IF L>0 THEN GOSUB _R1Record
   ELSE GOSUB _RNew
   ENDIF
RETURN

_RReverse:
   IF T=0 THEN T=1
   ELSE T=0
   ENDIF
   GOSUB _RSort
RETURN

BEGIN
   IF R=0 GOSUB _InitPgm
   IF D=-1 GOSUB _W1Record : D=-2 
   IF D=15 GOSUB _RSort
   IF D=16 GOSUB _RReverse
   IF D=18 GOSUB _RFirst
   IF D=19 GOSUB _RPrevious
   IF D=20 GOSUB _RNext
   IF D=21 GOSUB _RLast
   IF D=22 GOSUB _RDelete
   IF D=23 GOSUB _RNew
   CHAIN "iBAddress.ibas"
END